#ifndef STRSET_INCLUDED
#define STRSET_INCLUDED

#define T Strset_T
typedef struct T *T;

T Strset_new(void);		/*allocates and returns a new, empty set*/
void Strset_free(T *set);	/*Deallocates *set and its contents, set *set to NULL*/
void Strset_add(T set, char *str);	/*Adds str to set, if str is not already in set*/
void Strset_delete(T set, char *str);/*removes str fron set, if str is in set*/
int Strset_member(T set, char *str);	/*return 1 if str is in set else 0*/
void Strset_foreach(T set, void apply(char *str, void *cl), void *cl);	/*executes apply(s, cl) for each string s in set*/

/*It is a checked runtime error to pass a NULL T, *T, char* or apply to any function in this interface*/

#undef T

#endif
